#include "edytor_obrazow.h"
#include "ui_edytor_obrazow.h"

edytor_obrazow::edytor_obrazow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::edytor_obrazow)
{
   QTextCodec::setCodecForTr (QTextCodec::codecForName ("Utf-8"));
    efekt = 0;
    czyjestobraz = false;
    ui->setupUi(this);
    ui->nazwa_pliku->setText("Brak pliku!");

}

edytor_obrazow::~edytor_obrazow()
{
    delete ui;
}

//Otwieranie obrazu


void edytor_obrazow::on_zaladujBT_clicked()
{
   nazwa_obrazu =  QFileDialog::getOpenFileName(this,
                                                        tr("Wybierz obraz"), ".",
                                                        tr("Image Files (*.png *.bmp *.jpg *.jpeg)" ));
    obraz= cv::imread(nazwa_obrazu.toAscii().data());


    obraz2= obraz; //zapasowy
    // cv::namedWindow("open cv");
    // cv::imshow("open cv", obraz2); to dziala



    QImage obraz_w_obszarze= QImage((const unsigned char*)(obraz.data),
    obraz.cols,obraz.rows,QImage::Format_RGB888).rgbSwapped();

    ui->obszar_obrazu->setPixmap(QPixmap::fromImage(obraz_w_obszarze));
    ui->obszar_obrazu->resize(ui->obszar_obrazu->pixmap()->size());
    ui->nazwa_pliku->setText(nazwa_obrazu);

    if (!obraz.data) {QMessageBox::information(this,"Błąd!",
                                               tr("Nie udało się wczytać pliku!"));
          ui->nazwa_pliku->setText("Brak pliku!");
    }
   else czyjestobraz = true;

}

void edytor_obrazow::on_resetBT_clicked()
{

    if (czyjestobraz == true) {

obraz =  cv::imread(nazwa_obrazu.toAscii().data());
QImage obraz_w_obszarze= QImage((const unsigned char*)(obraz.data),
obraz.cols,obraz.rows,QImage::Format_RGB888).rgbSwapped();

ui->obszar_obrazu->setPixmap(QPixmap::fromImage(obraz_w_obszarze));
ui->obszar_obrazu->resize(ui->obszar_obrazu->pixmap()->size());
    }
    else{QMessageBox::information(this, "Reset",
                                  tr("Nie otworzyłeś jeszcze pliku."));
    };



}


void edytor_obrazow::on_efektBT_clicked()
{

    if (czyjestobraz == true) {

        int row= obraz.rows;
        int colum= obraz.cols * obraz.channels();
        int div =64;

        switch (efekt){
        //ODBIJ W POZIOMIE
        case 1:
            cv::flip(obraz,obraz,1);
        break;

        //ODBIJ W PIONIE
        case 2:
              cv::flip(obraz,obraz,0);
        break;
        //SKALA SZAROSCI
        case 3:
            cv::cvtColor(obraz, obraz, CV_BGR2GRAY );
            cv::cvtColor(obraz, obraz, CV_GRAY2BGR );
        break;

        //PROGOWANIE
        case 4:
            cv::cvtColor(obraz,obraz,CV_BGR2GRAY);
            cv::threshold(obraz,obraz,125,200,CV_THRESH_BINARY);
            cv::cvtColor(obraz, obraz, CV_GRAY2BGR );
        break;



        //ROZMYCIE GAUSSA
        case 5:
            cv::GaussianBlur(obraz,obraz, cv::Size(9, 9), 2, 2 );
        break;

        //REDUKCJA KOLORÓW
        case 6:


            for(int j=0;j<row;j++){
                uchar* data= obraz.ptr<uchar>(j);
                for(int i=0;i<colum;i++){
                    data[i]= data[i]/div*div + div/2;
                };
            };

        break;

        default:    ui->nazwa_pliku->setText("Brak pliku!");




        } //koniec switch

        QImage obraz_w_obszarze= QImage((const unsigned char*)(obraz.data),
                                        obraz.cols,obraz.rows,QImage::Format_RGB888).rgbSwapped();
        ui->obszar_obrazu->setPixmap(QPixmap::fromImage(obraz_w_obszarze));
        ui->obszar_obrazu->resize(ui->obszar_obrazu->pixmap()->size());



    }
    else{QMessageBox::information(this, "Efekt",
                                  tr("Nie otworzyłeś jeszcze pliku."));
    };



} //koniec click efekt



void edytor_obrazow::on_radio1_toggled(bool checked)
{
    efekt =1;
}

void edytor_obrazow::on_radio2_toggled(bool checked)
{
   efekt =2;
}

void edytor_obrazow::on_radio3_toggled(bool checked)
{
    efekt =3;
}

void edytor_obrazow::on_radio4_toggled(bool checked)
{
    efekt =4;
}

void edytor_obrazow::on_radio5_toggled(bool checked)
{
    efekt =5;
}

void edytor_obrazow::on_radio6_toggled(bool checked)
{
    efekt =6;
}

void edytor_obrazow::on_zapiszBT_clicked()
{

    if (czyjestobraz == true) {

  QString zapis_obrazu=  QFileDialog::getSaveFileName(this, tr("Wybierz lokalizacje"),".jpg" );

 std::string zmienna_zapis = zapis_obrazu.toStdString();

cv::imwrite(zmienna_zapis, obraz);

QMessageBox::information(this, "Zapis pliku",
                 tr("Plik został pomyślnie zapisany."));

    }
    else {
        QMessageBox::information(this, "Zapis pliku",
                         tr("Nie otworzyłeś jeszcze pliku."));};
}

